import { ResPage, Option, SysRole } from "@/api/interface/index";
import { CANROCNET } from "@/api/config/servicePort";
import http from "@/api";

/**
 * 新增角色
 *
 * @param params 角色表单
 * @returns 返回是否成功
 */
export const addRoleApi = (params: SysRole.Form) => {
  return http.post<boolean>(`${CANROCNET}/api/sys-role/addition`, params);
};

/**
 * 编辑角色
 *
 * @param params 角色表单
 * @returns 返回是否成功
 */
export const editRoleApi = (params: SysRole.Form) => {
  return http.post<boolean>(`${CANROCNET}/api/sys-role/edit`, params);
};

/**
 * 启用/禁用角色
 *
 * @param params 角色Id
 * @returns 返回是否成功
 */
export const switchEnableRoleApi = (params: { id: string }) => {
  return http.post<boolean>(`${CANROCNET}/api/sys-role/enable`, params);
};

/**
 * 删除角色
 *
 * @param params 角色Id
 * @returns 返回是否成功
 */
export const deleteRoleApi = (params: { ids: string[] }) => {
  return http.post<boolean>(`${CANROCNET}/api/sys-role/del`, params);
};

/**
 * 分配资源
 *
 * @param params 资源路由
 * @returns 返回是否成功
 */
export const distributionResourceApi = (params: SysRole.ResourceForm) => {
  return http.post<boolean>(`${CANROCNET}/api/sys-role/distribution-resource`, params);
};

/**
 * 获取角色已拥有的菜单集合
 *
 * @param params 角色Id
 * @returns 返回角色已拥有的菜单集合
 */
export const getRoleMenusApi = (params: { id: string }) => {
  return http.get<string[]>(`${CANROCNET}/api/sys-role/role-menu/${params.id}`, {}, { loading: false });
};

/**
 * 获取角色已有的资源列表
 *
 * @param params 角色Id
 * @returns 返回角色已有的路由列表
 */
export const getRoleResourceApi = (params: { id: string }) => {
  return http.get<string[]>(`${CANROCNET}/api/sys-role/role-resource/${params.id}`, {}, { loading: false });
};

/**
 * 获取角色列表
 *
 * @param params 角色查询参数
 * @returns 返回角色列表
 */
export const getRolePageApi = (params: SysRole.PageParams) => {
  return http.get<ResPage<SysRole.Result>>(`${CANROCNET}/api/sys-role/page`, params);
};

/**
 * 获取角色选项列表
 *
 * @returns 返回角色选项列表
 */
export const getRoleOptionApi = () => {
  return http.get<Option.SelectOption[]>(`${CANROCNET}/api/sys-role/select-option`, {}, { loading: false });
};
